The present invention relates to storage systems, and more specifically, this invention relates to storage systems which utilize storage controllers to respond to multipath input/output (I/O) requests.
Data storage systems are used to satisfy I/O requests which correspond to a number of different hosts (e.g., users). Accordingly, data storage systems often implement storage architectures which connect storage components to the various hosts. As I/O requests are received from the hosts, storage controllers may be used to process the requests such that read and/or write operations are actually performed at one or more of the storage components.
Multipathing is a technique which defines more than one communication path between two given locations in a storage system. For instance, multipathing is implemented by some servers to access a single logical unit number (LUN), virtual disk, volume, etc., using multiple fabric paths. Doing so helps improve fault tolerance by ensuring that the failure of a single fabric path does not render the LUN totally inaccessible.
Conventional multipath implementations drive path selection from the host location. For example, when a path fails, the I/O request is reattempted using a different path selected by a multipath driver at the host location. Similarly, I/O request attempts may be orchestrated by a host multipath driver and sent to the storage controller of a storage system in a round robin fashion in an attempt to improve bandwidth.
However, these conventional multipath implementations experience significant problems when attempting to respond to failed I/O requests. For instance, because path selection is performed by the host multipath driver, the path selection is performed without being aware of current fabric conditions and/or conditions of storage controllers. As a result, congestions in the fabric of the storage system is unknown to the host multipath driver until after an I/O request times out or I/O response times are prolonged. It follows that conventional multipath implementations are forced to guess as to which connections are best suited to accomplish a given I/O request.